草庐IT

c++ tcp多线程

全部标签

c# - 多线程应用程序中无锁的延迟加载

如果两个线程同时读取这个属性会怎样?publicstaticHugeTypeHugeType{get{if(tenderCache==null){tenderCache=Config.Get("HugeType",null);}returntenderCache;}}我的对象是只读的,如果创建两个实例并不重要。在任何情况下我都应该加锁吗? 最佳答案 因为没有同步,初始化方法可能会被调用很多次,即使其他线程已经完全完成初始化(由于缺少内存屏障)也可能如此。如果您不关心多次执行初始化操作并且无论调用多少次它总是返回相同的正确值,即使同时

c# - 为什么这个赋值不是线程安全的?

我一直在阅读JosephAlbahari关于线程的这本书:http://www.albahari.com/threading/在第2部分中,我找到了这个示例:http://www.albahari.com/threading/part2.aspx#_When_to_Lock这是前面提到的例子:classThreadUnsafe{staticint_x;staticvoidIncrement(){_x++;}staticvoidAssign(){_x=123;}}线程安全版本:classThreadSafe{staticreadonlyobject_locker=newobject();

c# - 从 ProcessThreadCollection 按名称获取正在运行的线程

在搜索StackOverflow问题和一些谷歌搜索后,我仍然没有得到它。我知道您可以使用“Thread.isAlive()”方法检查单个线程是否正在运行,但我想检查特定的“FooThread”是否仍在当前进程的所有正在运行的线程之间运行,并且如果没有,调用启动它的方法。//somewhereinthecode,onanotherProject/DLLinsidesolutionprivatevoidFooThreadCaller(){Actionact=()=>fooFunction();Threadt=newThread(newThreadStart(act));t.Name="Fo

c# - .NET 的 ConcurrentDictionary 的哪些成员是线程安全的?

System.Collections.Concurrent.ConcurrentDictionary的MSDN文档说:ThreadSafetyAllpublicandprotectedmembersofConcurrentDictionaryarethread-safeandmaybeusedconcurrentlyfrommultiplethreads.However,membersaccessedthroughoneoftheinterfacestheConcurrentDictionaryimplements,includingextensionmethods,arenotgua

c# - 当所述线程正在执行 Console.ReadLine 时,如何中止 .NET 中的另一个线程?

这个问题在这里已经有了答案:HowtointerruptConsole.ReadLine(11个答案)关闭3年前。我的控制台应用程序正在执行一个完全专注于用户界面的线程,它花费大量时间阻塞在Console.ReadLine()上(这个调用在内部深处花费时间Windows,在.NET框架的控制之外)。我需要中止这个线程。但是,以下代码似乎不起作用:this.UserInterfaceThread.Abort();有什么想法吗?Thread.Interrupt()有什么用吗?更新正如HansPassant指出的那样:TheCLRimposesrathersanerulesonthestat

c# - 在同一个线程中锁定字典

我有一个函数,它根据键(名称)返回字典中的一个条目,如果它不存在,则返回一个新创建的条目。我的问题是“双锁”:SomeFunction锁定_dictionary,检查键是否存在,然后调用一个也锁定同一个字典的函数,它似乎工作但我不确定是否这种方法存在潜在问题。publicMachineSomeFunction(stringname){lock(_dictionary){if(!_dictionary.ContainsKey(name))returnCreateMachine(name);return_dictionary[name];}}privateMachineCreateMach

c# - 对 C# 循环中的多线程感到困惑

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C#CapturedVariableInLoop我是多线程编程的新手。当我运行下面的代码时,只有最后一个child被执行。有人能告诉我发生了什么事吗?非常感谢。privatevoidProcess(){DictionarydataDict=newDictionary();dataDict.Add(1,2000);dataDict.Add(2,1000);dataDict.Add(3,4000);dataDict.Add(4,3000);foreach(KeyValuePairkvpindataDict){Co

c# - ConcurrentDictionary 对象 - 通过不同的线程读写

我想在我的应用程序中使用ConcurrentDictionary,但首先我需要确保我正确理解它的工作原理。在我的应用程序中,我将有一个或多个线程写入字典或从字典中删除。而且,我会有一个或多个线程从字典中读取。可能同时发生。我是否正确认为ConcurrentDictionary的实现会处理所有必需的锁定,而我不需要提供自己的锁定?换句话说,如果一个线程正在对字典进行写入或删除操作,那么读取线程(或另一个写入线程)将被阻塞,直到更新或删除完成为止?非常感谢。 最佳答案 当前的实现混合使用了strip锁(我昨天在https://stack

c# - HttpClient.SendAsync 使用线程池而不是异步 IO?

所以我一直在深入研究HttpClient.SendAsync的实现通过反射器。我有意想知道这些方法的执行流程,并确定调用哪个API来执行异步IO工作。探索里面的各个类之后HttpClient,我看到它在内部使用HttpClientHandler源自HttpMessageHandler并实现其SendAsync方法。这是HttpClientHandler.SendAsync的实现:protectedinternaloverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){if(r

c# - 为什么运行一百个异步任务比运行一百个线程花费的时间更长?

为什么运行一百个异步任务比运行一百个线程花费的时间更长?我有以下测试类:publicclassAsyncTests{publicvoidTestMethod1(){vartasks=newList();for(vari=0;i();for(vari=0;iLongRunningOperationAsync(){varsw=Stopwatch.StartNew();awaitTask.Delay(500);Debug.WriteLine("Completedat{0},took{1}ms",DateTime.Now,sw.Elapsed.TotalMilliseconds);return